SelectListenerCollection.java
package org.codefilarete.stalactite.engine.listener;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* @author Guillaume Mary
*/
public class SelectListenerCollection<C, I> implements SelectListener<C, I> {
private final List<SelectListener<C, I>> selectListeners = new ArrayList<>();
@Override
public void beforeSelect(Iterable<I> ids) {
selectListeners.forEach(listener -> listener.beforeSelect(ids));
}
@Override
public void afterSelect(Set<? extends C> entities) {
selectListeners.forEach(listener -> listener.afterSelect(entities));
}
@Override
public void onSelectError(Iterable<I> ids, RuntimeException exception) {
selectListeners.forEach(listener -> listener.onSelectError(ids, exception));
}
public void add(SelectListener<? extends C, I> selectListener) {
this.selectListeners.add((SelectListener<C, I>) selectListener);
}
/**
* Move internal listeners to given instance.
* Useful to aggregate listeners into a single instance.
* Please note that as this method is named "move" it means that listeners of current instance will be cleared.
*
* @param selectListener the target listener on which the one of current instance must be moved to.
*/
public void moveTo(SelectListenerCollection<C, I> selectListener) {
selectListener.selectListeners.addAll(this.selectListeners);
this.selectListeners.clear();
}
}